home *** CD-ROM | disk | FTP | other *** search
-
- UNIT FastWrit;
-
- INTERFACE
-
- procedure FastWrite(Strng : String; Row, Col, Attr : Byte);
-
- IMPLEMENTATION
-
- VAR
- BaseOfScreen : WORD;
-
- procedure FastWrite(Strng : String; Row, Col, Attr : Byte); assembler;
- asm
- PUSH DS { ;Save DS }
- MOV CH,Row { ;CH = Row }
- MOV BL,Col { ;BL = Column }
-
- XOR AX,AX { ;AX = 0 }
- MOV CL,AL { ;CL = 0 }
- MOV BH,AL { ;BH = 0 }
- DEC CH { ;Row (in CH) to 0..24 range }
- SHR CX,1 { ;CX = Row * 128 }
- MOV DI,CX { ;Store in DI }
- SHR DI,1 { ;DI = Row * 64 }
- SHR DI,1 { ;DI = Row * 32 }
- ADD DI,CX { ;DI = (Row * 160) }
- DEC BX { ;Col (in BX) to 0..79 range }
- SHL BX,1 { ;Account for attribute bytes }
- ADD DI,BX { ;DI = (Row * 160) + (Col * 2) }
- MOV ES,BaseOfScreen { ;ES:DI points to BaseOfScreen:Row,Col }
-
- LDS SI,DWORD PTR [Strng] { ;DS:SI points to St[0] }
- CLD { ;Set direction to forward }
- LODSB { ;AX = Length(St); DS:SI -> St[1] }
- XCHG AX,CX { ;CX = Length; AL = WaitForRetrace }
- JCXZ @FWExit { ;If string empty, exit }
- MOV AH,Attr { ;AH = Attribute }
- @FWDisplay:
- LODSB { ;Load next character into AL }
- { ; AH already has Attr }
- STOSW { ;Move video word into place }
- LOOP @FWDisplay { ;Get next character }
- @FWExit:
- POP DS { ;Restore DS }
- end; {asm block}
-
- BEGIN
- ASM
- mov BaseOfScreen,$B000
- mov ax,$0F00
- int $10
- cmp al,2
- je @XXX
- cmp al,7
- je @XXX
- mov BaseOfScreen,$B800
- @XXX :
- end;
- END.